https://bntr.livejournal.com/63650.html

Unity3d assets

Кроме игры еще выложил было три нужнейших ассета:



Reverse Perspective Camera
Catmull-Clark Mesh Subdivision
Curved Space Shader




Current films:

Manchester by the Sea

Toni Erdmann

Turist

Paterson

Ghost in the Shell

Logan's Run

Deux jours, une nuit

Obvious Child

Blade Runner

Only Lovers Left Alive

Okuribito

Mother!

It

Blade Runner 2049

Three Billboards



La clé des champs

Kirikou et la sorcière

Le papillon

Koneko monogatari

Nicostratos le pélican



drew_fighter: Где игра-то? (March 10 2018, 06:22:31 UTC) t365218
bntr: Игра та же - в предыдущем посте. Эти Subdivision и Shader - для неё были написаны. (March 10 2018, 06:28:30 UTC) t365730
drew_fighter: А что, есть какой-то общеупотребительный способ хорошей триангуляции сферы?
Я для для натягивания сетки на сферу некую окто-сферу изобретал.
(March 10 2018, 06:24:22 UTC) t365474
bntr: Кажется, называются Quad sphere и Ico sphere - и есть самые распространённые. Они и получаются как subdivision платоновых тел: куба (или же октаэдра) и икосаэдра.

(March 10 2018, 06:42:00 UTC) t365986
drew_fighter: Хм, интересно! Я как-то не догадался, что куб и октаэдр это одно и то же %)

Я преобразовывал октаэдр в сферу вот по такому принципу:

(March 10 2018, 17:36:12 UTC) t366242
bntr: Да, первый же шаг subdivision у куба и октаэдра совпадают, из-за их двойственности: грани одного соответствуют вершинам другого:



Расскажи, а зачем тебе понадобилось натягивать сетку на сферу?

Насколько я знаю, в 3д моделировании равномерность сетки не так важна, и тогда используют все варианты.
А вот, например, в метеорологических моделях швы оказываются лучше полюсов, и используют эту Quad sphere:


(March 11 2018, 07:12:08 UTC) t366754
drew_fighter: > Расскажи, а зачем тебе понадобилось натягивать сетку на сферу?

Я сгенерировал ландшафт на квадрате размерностью N x N некоей разновидностью алгоритма "Плазма", где N = 2 ^ n, где n целое положительное число. Дальше я натянул координатную сетку на квад-куб соответствующей степени детализации, чтобы точки координатной сетки попадали на узлы квад-куба. Прибавив к значениям радиуса сферы значения из координатной сетки, я получил расстояния узлов квад-куба от его центра. Таким образом, я получил имитацию рельефа на сфере. (March 11 2018, 10:56:41 UTC) t367010
bntr: Интересно, а как ты поставил в соответствие квадрат (с его четырьмя сторонами) и замкнутую сферическую поверхность? Или у тебя было несколько квадратов, плавно (чтобы скрыть швы) переходящих друг в друга? (March 12 2018, 05:32:41 UTC) t367778
drew_fighter: Нет, квадрат один.

Know how ;)
Я хотел написать об этом статью на хабре, но поленился, поскольку никогда этого не делал.

На самом деле, если ты представишь, как натянуть квадрат на октаэдр, то поймёшь, как натянуть квадрат на сферу. И, да, края квадрата сшиваются нетривиально. Возможно, в этом методе есть новизна, потому что его описания я в гугле не нашёл.

Я знал, что ты заценишь! :)
Предлагаю тебе эту головоломку. Если не разгадаешь, или тебе лень, я скину чертёж с подсказкой. (March 12 2018, 07:30:04 UTC) t368034
bntr: Интересная задача :)
Квадрат натянуть на октаэдр/сферу несложно, как-то так например:



А вот бесшовно соединить.. Наверное, проще всего оставить по краям развёртки какой-то запас, и соединить края внахлёст - с плавным переходом из одного в другой. (March 12 2018, 11:35:53 UTC) t368290
drew_fighter: Кажется, что это вариант проекции явно не лучший в смысле равномерности сетки. Очевидны области значительного сгущения линий сетки, как в приведенном тобой выше примере триангуляции "ECP". Я нашёл более изящный вариант :)

Сдаёшься? ;) (March 12 2018, 13:34:29 UTC) t369058
bntr: Той картинкой я хотел показать только расположение восьми треугольных граней октаэдра в квадрате.
По твоим скриншотам видно, что сетка у тебя скорее треугольная - такая:



Если не угадал, конечно хотелось бы видеть твой вариант :) (March 12 2018, 15:16:45 UTC) t369570
drew_fighter: Да, эта сетка похожа.
Ну, значит, я преувеличил степень новизны :) (March 13 2018, 05:38:59 UTC) t369826
drew_fighter: Я обеспечивал безшовность специальным способом генерации рельефа вдоль швов: в накладывающихся точках шва высота рельефа одинакова. Впрочем, некоторые артефакты швов на приведенных мной скриншотах наблюдаются, особенно при высокой детализации сетки. Причина мне пока не понятна. (March 12 2018, 13:39:40 UTC) t369314
drew_fighter: Грубо говоря, я получил вот такие модели в итоге.
В качестве рендера использовал трассировку луча.
Сцена с планетой x8096.png
Сцена с планетой x2048.png
Сцена с планетой x0512.png
Сцена с планетой x0128.png (March 11 2018, 10:59:16 UTC) t367266
drew_fighter: Идея была в том, чтобы получать вот такие картинки:
Планета 6 8кк высота 0.1 AA16.png
На этой картинке примерно 8.388.608 треугольников, и такая картинка строится около 7 секунд в одном потоке. Именно эта картинка построена старым вариантом рендера, там время построения картинки было на два порядка больше. (March 11 2018, 11:13:28 UTC) t367522
bntr: Красивая планета. Я верно понял, это начало разработки игры?
Ты не хотел попробовать OpenGL вместо ray tracing? Подозреваю, это было бы быстрее. Сейчас бывает аппаратная поддержка т.н. Vertex Texture для генерации ландшафта: в вертексном шейдере для каждого вертекса запрашивается значение из например растровой текстуры высот (вроде твоего квадрата N x N) и вертекс соответственно сдвигается в пространстве. (March 12 2018, 11:56:50 UTC) t368546
drew_fighter: Идея игры действительно была, но сейчас ray tracing я пишу, как концепт движка визуализации. Разработку игры не планирую, так как понимаю масштаб работ, и не готов посвятить столько времени этой теме.

Есть вероятность, что я выпущу некую концептуальную демонстрацию.

Изначально, заготовка ray tracing движка визуализации появилась именно потому, что я очень не хотел начинать писать визуализацию на OpenGL, так как примеры использования OpenGL, которые я видел, казались вычурно-сложными. В то же время, движок с использованием ray tracing выглядел довольно изящным.

Сейчас, если думать о визуализации с использованием существующих фреймворков, то имеет смысл использовать Unity, а не OpenGL. Я думаю, ты понимаешь, почему. То, что аппаратная поддержка DirectX, OpenGL и прочих работает быстрее, чем ray tracing - это понятно, однако и с ray tracing я получил интересные результаты. Например, [у меня] сейчас кадр с 8кк треугольников отрисовывается в окне 1440x900 пикселей за 2 секунды на одном ядре CPU, и производительность рендера почти линейно растёт с увеличением числа используемых ядер. Более того, производительность рендера слабо зависит от сложности сцены, так что я не удивлюсь, если при определенной сложности сцены ray tracing будет работать там, где Unity надорвётся (?)

Впрочем, прямые сравнения производительности я не выполнял, так как работу с Unity видел только в видеопримерах. (March 12 2018, 13:16:39 UTC) t368802
drew_fighter: Из этих четырех способов только QuadCube хорошо подходит для натягивания на них квадратной сетки? На ECP, вижу, сетка тоже натягивается, но неравномерно. Всё верно? (March 10 2018, 17:39:57 UTC) t366498
..